package com.liao.controller;

import com.liao.bean.Module;
import com.liao.bean.TreeNodeVo;
import com.liao.bean.result.Code;
import com.liao.bean.result.Msg;
import com.liao.bean.result.PageResult;
import com.liao.bean.result.Result;
import com.liao.service.ModuleService;
import com.liao.utils.MyUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.text.DecimalFormat;
import java.util.List;

@Controller
@RequestMapping("/module")
public class ModuleController {

    @Autowired
    private ModuleService moduleService;

    @ResponseBody
    @RequestMapping("/queryModuleListByPage")
    public PageResult queryModuleListByPage(@RequestParam(defaultValue = "1")Integer currentPage,
                                            @RequestParam(defaultValue = "5")Integer pageSize,
                                            @RequestParam(defaultValue = "") String moduleName) throws Exception {
        PageResult<Module> pageResult = moduleService.queryModuleListByPage(currentPage,pageSize,moduleName);
        return pageResult;
    }

    @ResponseBody
    @RequestMapping("/queryFirstModuleList")
    public Result queryFirstModuleList() throws Exception {
         List<Module> moduleList = moduleService.queryFirstModuleList();
         return new Result(true, Code.MODULE_QUERY_SUCCESS, Msg.MODULE_QUERY_SUCCESS,moduleList);
    }

    @ResponseBody
    @RequestMapping("/queryChildModuleListByParentModule")
    public Result queryChildModuleListByParentModule(String parentModule) throws Exception{
        List<Module> moduleList = moduleService.queryChildModuleListByParentModule(parentModule);
        return new Result(true, Code.MODULE_QUERY_SUCCESS, Msg.MODULE_QUERY_SUCCESS,moduleList);
    }

    @ResponseBody
    @RequestMapping("/queryTreeNodeListHierarchy")
    public Result queryTreeNodeListHierarchy(String roleId) throws Exception{
        //有层级的查询所有菜单
        List<TreeNodeVo> treeNodeVos = moduleService.queryTreeNodeListHierarchy();
        //根据角色编号查询已经授权过的三级菜单
        List<TreeNodeVo> treeNodeVoList = moduleService.queryThirdTreeNodeListByRoleId(roleId);
        //拿着treeNodeVos的三级菜单和已经授权过的三级菜单比对

        //一级菜单
        for (TreeNodeVo m1 : treeNodeVos) {
            //展开一级菜单
            m1.setSpread(true);
            List<TreeNodeVo> m2List = m1.getChildren();

            //二级菜单
            for (TreeNodeVo m2 : m2List) {
                List<TreeNodeVo> m3List = m2.getChildren();

                //三级菜单
                for (TreeNodeVo m3 : m3List) {
                    for (TreeNodeVo tree3 : treeNodeVoList) {
                        if (m3.getId().equals(tree3.getId())){
                            //如果比对上了，就选中该三级菜单
                            m3.setChecked(true);
                        }
                    }
                }
            }
        }

        return new Result(true,Code.MODULE_QUERY_SUCCESS,Msg.MODULE_QUERY_SUCCESS,treeNodeVos);
    }

    @ResponseBody
    @RequestMapping("/grant")
    public Result grant(String roleId,@RequestParam("moduleIds[]") List<String> moduleIds) throws Exception {

        //将之前的授权删除
        moduleService.deleteGrantsByRoleId(roleId);
        //将选中的菜单编号添加到sys_role_fun中
        for (String moduleId : moduleIds) {
            moduleService.grant(roleId,moduleId);
        }

        return new Result(true,Code.GRANT_SUCCESS,Msg.GRANT_SUCCESS);
    }

//    @ResponseBody
//    @RequestMapping("/addFirstModule")
//    public Result addFirstModule(String title) throws Exception{
//        //获取菜单最后一个的module_id
//        String parent_module = "01";
//        String moduleId=moduleService.queryModuleByFinallyId(parent_module);
//        //将菜单id自增加1
//        int i = Integer.parseInt(moduleId);
//        int k=i+1;
//        String s = String.valueOf(k);
////        System.out.println(s);
////        System.out.println("----------");
//        DecimalFormat df=new DecimalFormat("0000");
//        moduleId=df.format(Integer.parseInt(s));
////        System.out.println(str2);
//        //根据菜单名称添加一级菜单
//        //判断菜单名称是否已经存在
//        boolean flag=moduleService.queryModuleByTitle(title,parent_module);
//        if (!flag){
//            moduleService.addFirstModule(moduleId,title,parent_module);
//            return new Result(true,Code.MODULE_ADD_SUCCESS,Msg.MODULE_ADD_SUCCESS);
//        }
//        return new Result(false,Code.MODULE_ADD_FAIL,Msg.MODULE_ADD_FAIL);
//
//    }
//
//    @ResponseBody
//    @RequestMapping("/addSecondModule")
//    public Result addSecondModule(String firstModule,String title) throws Exception{
//        //获得了一级菜单module_id
//        //获取菜单最后一个的module_id
//        String parent_module = firstModule;
//
//        String moduleId=moduleService.queryModuleByFinallyId(parent_module);
//        if (null == moduleId){
//            StringBuilder sb = new StringBuilder(parent_module);
//            sb.append("00");
//            moduleId=sb.toString();
//        }
//        //将菜单id自增加1
//        int i = Integer.parseInt(moduleId);
//        int k=i+1;
//        String s = String.valueOf(k);
////        System.out.println(s);
////        System.out.println("----------");
//        DecimalFormat df=new DecimalFormat("000000");
//        moduleId=df.format(Integer.parseInt(s));
////        System.out.println(str2);
//        //根据菜单名称添加一级菜单
//        //判断菜单名称是否已经存在
//        boolean flag=moduleService.queryModuleByTitle(title,parent_module);
//        if (!flag){
//            moduleService.addFirstModule(moduleId,title, parent_module);
//            return new Result(true, Code.MODULE_ADD_SUCCESS, Msg.MODULE_ADD_SUCCESS);
//        }
//        return new Result(false,Code.MODULE_ADD_FAIL,Msg.MODULE_ADD_FAIL);
//    }

    @ResponseBody
    @RequestMapping("/addThirdModule")
    public Result addThirdModule(String firstModule,String secondModule,String title,String href) throws Exception {

        //获得了一级菜单module_id
        //获取菜单最后一个的module_id
        String parent_module;
        if (null != secondModule){
            parent_module = secondModule;
        }else if (null != firstModule){
            parent_module = firstModule;
        }else {
            parent_module = "01";
        }

        String moduleId=moduleService.queryModuleByFinallyId(parent_module);
        int len = parent_module.length();
        if (len != 2){
            if (null == moduleId){
                StringBuilder sb = new StringBuilder(parent_module);
                sb.append("00");
                moduleId=sb.toString();
            }
        }
        //将菜单id自增加1
        int i = Integer.parseInt(moduleId);
        int k=i+1;
        String s = String.valueOf(k);
//        System.out.println(s);
//        System.out.println("----------");
        DecimalFormat df;
        if (len==2){
            df=new DecimalFormat("0000");
        }else if (len ==4){
            df=new DecimalFormat("000000");
        }else {
            df=new DecimalFormat("00000000");
        }
        moduleId=df.format(Integer.parseInt(s));
//        System.out.println(str2);
        //根据菜单名称添加一级菜单
        //判断菜单名称是否已经存在
        boolean flag=moduleService.queryModuleByTitle(title,parent_module);
        if (!flag){
            moduleService.addThirdModule(moduleId,title, parent_module,href);
            return new Result(true, Code.MODULE_ADD_SUCCESS, Msg.MODULE_ADD_SUCCESS);
        }
        return new Result(false,Code.MODULE_ADD_FAIL,Msg.MODULE_ADD_FAIL);
    }

    @ResponseBody
    @RequestMapping("/editModule")
    public Result editModule(String moduleId,String title,String href) throws Exception {
        moduleService.editModule(moduleId,title,href);
        return new Result(true, Code.MODULE_ADD_SUCCESS, Msg.MODULE_ADD_SUCCESS);
    }

    @ResponseBody
    @RequestMapping("/deleteModule")
    public Result deleteModule(String moduleId) throws Exception {
        //判断菜单是否有子菜单--查询该子级菜单的最后一个菜单
        String finallyId = moduleService.queryModuleByFinallyId(moduleId);
        //1、判断菜单是否有子菜单，如果有则不能直接删除
        if (finallyId == null || finallyId == ""){
            //没有子级菜单，可以直接删除
            moduleService.deleteModule(moduleId);
            return new Result(true,Code.MODULE_DELETE_SUCCESS,Msg.MODULE_DELETE_SUCCESS);
        }else{
            //有子级菜单，不能直接删除，删除失败；
            return new Result(false,Code.MODULE_DELETE_FAIL,Msg.MODULE_DELETE_FAIL);
        }

    }

    @ResponseBody
    @RequestMapping("/deleteModuleIds")
    public Result deleteModuleIds(@RequestParam("moduleIds[]") List<String> moduleIds) throws Exception {
        for (String moduleId : moduleIds) {
            //判断菜单是否有子菜单--查询该子级菜单的最后一个菜单
            String finallyId = moduleService.queryModuleByFinallyId(moduleId);
            //1、判断菜单是否有子菜单，如果有则不能直接删除
            if (finallyId == null || finallyId == ""){
                //没有子级菜单，可以直接删除
                moduleService.deleteModule(moduleId);
            }else{
                //有子级菜单，不能直接删除，删除失败；
                return new Result(false,Code.MODULE_DELETE_FAIL,Msg.MODULE_DELETE_FAIL);
            }
        }
        return new Result(true,Code.MODULE_DELETE_SUCCESS,Msg.MODULE_DELETE_SUCCESS);
    }

}
